#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
generic_logger 使用案例演示

从简单到复杂展示日志系统的使用方法：
1. 基础日志记录
2. 使用预设配置
3. 自定义日志格式
4. 文件日志输出
5. 日志轮转配置
"""

import os
import shutil
import time
import logging
from generic_logger import LoggerManager, get_logger

def prepare_env():
    """准备测试环境"""
    print("\n[环境准备] 初始化日志目录...")
    if os.path.exists('logs'):
        shutil.rmtree('logs')
    os.makedirs('logs', exist_ok=True)
    print("[环境准备] 日志目录已准备好: ./logs/")

def case1_basic_logging():
    """案例1: 基础日志记录"""
    print("\n=== 案例1: 基础日志记录 ===")
    print("展示最基本的日志记录功能")

    # 获取默认日志记录器
    logger = get_logger("basic_demo")

    # 记录不同级别日志
    logger.debug("调试信息 - 通常用于开发阶段")
    logger.info("常规信息 - 程序运行状态")
    logger.warning("警告信息 - 需要注意的情况")
    logger.error("错误信息 - 需要处理的问题")
    logger.critical("严重错误 - 需要立即处理")

    print("\n[说明] 这是最基本的日志记录方式，适合简单应用")

def case2_preset_config():
    """案例2: 使用预设配置"""
    print("\n=== 案例2: 使用预设配置 ===")
    print("展示如何使用预定义的日志配置")

    # 初始化配置管理器
    manager = LoggerManager()

    # 使用开发环境预设
    print("\n[开发环境配置] 控制台输出DEBUG及以上级别日志")
    dev_logger = manager.get_logger("dev_demo", preset='dev')
    dev_logger.debug("开发调试信息")
    dev_logger.info("开发环境信息")

    # 使用生产环境预设
    print("\n[生产环境配置] 仅文件输出INFO及以上级别日志")
    prod_logger = manager.get_logger("prod_demo", preset='prod')
    prod_logger.debug("这条DEBUG日志不会显示")  # 生产环境不记录DEBUG
    prod_logger.info("生产环境信息")

    print("\n[说明] 预设配置适合快速启用标准日志方案")

def case3_custom_format():
    """案例3: 自定义日志格式"""
    print("\n=== 案例3: 自定义日志格式 ===")
    print("展示如何修改现有日志记录器的格式")

    # 获取默认日志记录器
    logger = get_logger("custom_demo")

    # 获取日志记录器的所有处理器
    for handler in logger.handlers:
        # 创建自定义格式
        formatter = logging.Formatter(
            '%(asctime)s | %(levelname)-8s | %(message)s'
        )
        handler.setFormatter(formatter)

    # 记录日志
    logger.debug("自定义格式的调试信息")
    logger.info("自定义格式的常规信息")

    print("\n[说明] 可通过修改处理器的formatter属性来自定义日志格式")

def case4_file_logging():
    """案例4: 文件日志输出"""
    print("\n=== 案例4: 文件日志输出 ===")
    print("展示如何配置文件日志记录")

    # 配置文件日志
    manager = LoggerManager()

    # 获取文件记录器（使用仅文件输出的预设）
    logger = manager.get_logger("file_demo", preset='file_only')

    # 记录日志到文件
    logger.info("这条日志会写入文件")
    logger.warning("警告信息也会写入文件")

    print("\n[说明] 文件日志适合需要持久化日志记录的场合")
    print("日志文件已生成到: logs/file_demo.log")

def case5_log_rotation():
    """案例5: 日志轮转配置"""
    print("\n=== 案例5: 日志轮转 ===")
    print("展示如何配置日志文件轮转")

    # 配置轮转日志
    manager = LoggerManager()

    # 获取记录器（使用生产环境预设，包含日志轮转）
    logger = manager.get_logger("rotation_demo", preset='prod')

    # 生成测试日志 - 大幅增加数据量以快速触发轮转
    print("正在生成2000条超大测试日志(间隔0.01秒)...")
    long_message = "这是一条非常长的日志消息-" * 500  # 每条约10KB
    for i in range(2000):
        logger.info(f"测试轮转-{i+1}-" + long_message + str(time.time()))
        time.sleep(0.01)

    print("\n[说明] 日志轮转可防止单个日志文件过大")
    print("轮转日志已生成到: logs/prod.log")

def main():
    """主演示函数"""
    print("\n=== generic_logger 使用案例演示 ===")
    print("将按照从简单到复杂的顺序展示日志系统使用方法\n")

    # 准备环境
    prepare_env()

    # 执行案例演示
    case1_basic_logging()
    case2_preset_config()
    case3_custom_format()
    case4_file_logging()
    case5_log_rotation()

    # 演示总结
    print("\n=== 演示总结 ===")
    print("1. 已完成所有案例演示")
    print("2. 请检查./logs/目录下的日志文件")
    print("3. 可根据需要复制案例代码")

if __name__ == '__main__':
    main()